package com.ruoyi.lyy.controller;

import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.lyy.domain.vo.DashboardRowOneVO;
import com.ruoyi.lyy.domain.vo.DashboardRowTwoVO;
import com.ruoyi.lyy.domain.vo.RowTwoOrderCount;
import com.ruoyi.lyy.service.IDashboardService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.weaver.loadtime.Aj;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;

/**
 * @author YueYang
 * Created on 2025/11/13 16:17
 * @version 1.0
 * 控制台接口 pc端首页
 */
@Slf4j
@RequiredArgsConstructor
@RestController
@RequestMapping("/dashboard")
public class DashboardController {

    private final IDashboardService dashboardService;


    /**
     * 获取首页第一行数据，根据开始时间和结束时间，默认是当前时间
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 首页数据
     */
    @GetMapping
    public AjaxResult getRowOne(@RequestParam(value = "startTime", required = false) String startTime,
                                @RequestParam(value = "endTime", required = false) String endTime) {
        //判断开始时间和结束时间是否为空
        if (startTime == null || endTime == null) {
            log.warn("开始时间或结束时间为空，自动赋值为昨天和今天的23:59:00");
            // 获取当前时间
            LocalDateTime now = LocalDateTime.now();
            // 设置endTime为今天的23:59:00
            endTime = now.withHour(23).withMinute(59).withSecond(0).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
            // 设置startTime为30天前的23:59:00
            startTime = now.minusDays(30).withHour(23).withMinute(59).withSecond(0).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        }

        return dashboardService.getRowOne(startTime, endTime);


    }

    /**
     * 实际的获取首页第一行数据的接口
     * 模拟上面方法通过openFeign调用这个接口拿到首页第一行数据
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 首页数据
     */
    @GetMapping("/rowOne")
    public AjaxResult getRowOneByFeign(@RequestParam("startTime") String startTime,
                                       @RequestParam("endTime") String endTime) {

        //实际调用服务层方法获取首页数据
        DashboardRowOneVO dashboardRowOneVO = dashboardService.getRealRowOne(startTime, endTime);
        return AjaxResult.success("获取首页第一行数据成功", dashboardRowOneVO);
    }

    /**
     * 获取首页第二行数据
     * 订单统计； 救援任务统计；用户概况
     *
     * @return 返回查询结果
     */
    @GetMapping("/rowTwo")
    public AjaxResult getRowTwo() {
        DashboardRowTwoVO dashboardRowTwoVO = dashboardService.getRowTwoData();
        return AjaxResult.success("获取首页第二行数据成功", dashboardRowTwoVO);
    }


    /**
     * 获取首页第三行数据，柱状图返回name value格式的数据
     *
     * @return 首页数据
     */
    @GetMapping("/rowThree")
    public AjaxResult getRowThree() {
        List<RowTwoOrderCount> rowTwoOrderCountList = dashboardService.getRowThreeData();
        return AjaxResult.success("获取首页第三行数据成功", rowTwoOrderCountList);
    }

}
